function CreateIndigo(module)  // create Indigo adapter object
{
	var Module = module || Module();
	var result = {
		INDIGO_RC_NOT_CENTER: -1,
		INDIGO_RC_UNMARKED: 0,
		INDIGO_RC_CENTER: 1,
		INDIGO_RC_UNCHANGED: 2,
		INDIGO_RC_MADE_OR_BROKEN: 4,
		INDIGO_RC_ORDER_CHANGED: 8,
		INDIGO_ABS: 1,
		INDIGO_OR: 2,
		INDIGO_AND: 3,
		INDIGO_EITHER: 4,
		INDIGO_UP: 5,
		INDIGO_DOWN: 6,
		INDIGO_CIS: 7,
		INDIGO_TRANS: 8,
		INDIGO_CHAIN: 9,
		INDIGO_RING: 10,
		INDIGO_ALLENE: 11,
		INDIGO_SINGLET: 101,
		INDIGO_DOUBLET: 102,
		INDIGO_TRIPLET: 103,
		version: Module.cwrap('indigoVersion', 'string', []),
		allocSessionId: Module.cwrap('indigoAllocSessionId', 'number', []),
		setSessionId: Module.cwrap('indigoSetSessionId', null, ['number']),
		releaseSessionId: Module.cwrap('indigoReleaseSessionId', null, ['number']),
		getLastError: Module.cwrap('indigoGetLastError', 'string', []),
		free: Module.cwrap('indigoFree', 'number', ['number']),
		clone: Module.cwrap('indigoClone', 'number', ['number']),
		countReferences: Module.cwrap('indigoCountReferences', 'number', []),
		freeAllObjects: Module.cwrap('indigoFreeAllObjects', 'number', []),
		setOption: Module.cwrap('indigoSetOption', 'number', ['string', 'string']),
		setOptionInt: Module.cwrap('indigoSetOptionInt', 'number', ['string', 'number']),
		setOptionBool: Module.cwrap('indigoSetOptionBool', 'number', ['string', 'number']),
		setOptionFloat: Module.cwrap('indigoSetOptionFloat', 'number', ['string', 'number']),
		setOptionColor: Module.cwrap('indigoSetOptionColor', 'number', ['string', 'number', 'number', 'number']),
		setOptionXY: Module.cwrap('indigoSetOptionXY', 'number', ['string', 'number', 'number']),
		resetOptions: Module.cwrap('indigoResetOptions', 'number', []),
		readString: Module.cwrap('indigoReadString', 'number', ['string']),
		loadString: Module.cwrap('indigoLoadString', 'number', ['string']),
		readBuffer: Module.cwrap('indigoReadBuffer', 'number', ['string', 'number']),
		loadBuffer: Module.cwrap('indigoLoadBuffer', 'number', ['string', 'number']),
		writeBuffer: Module.cwrap('indigoWriteBuffer', 'number', []),
		close: Module.cwrap('indigoClose', 'number', ['number']),
		next: Module.cwrap('indigoNext', 'number', ['number']),
		hasNext: Module.cwrap('indigoHasNext', 'number', ['number']),
		index: Module.cwrap('indigoIndex', 'number', ['number']),
		remove: Module.cwrap('indigoRemove', 'number', ['number']),
		createMolecule: Module.cwrap('indigoCreateMolecule', 'number', []),
		createQueryMolecule: Module.cwrap('indigoCreateQueryMolecule', 'number', []),
		loadMolecule: Module.cwrap('indigoLoadMolecule', 'number', ['number']),
		loadMoleculeFromString: Module.cwrap('indigoLoadMoleculeFromString', 'number', ['string']),
		loadMoleculeFromBuffer: Module.cwrap('indigoLoadMoleculeFromBuffer', 'number', ['string', 'number']),
		loadQueryMolecule: Module.cwrap('indigoLoadQueryMolecule', 'number', ['number']),
		loadQueryMoleculeFromString: Module.cwrap('indigoLoadQueryMoleculeFromString', 'number', ['string']),
		loadQueryMoleculeFromBuffer: Module.cwrap('indigoLoadQueryMoleculeFromBuffer', 'number', ['string', 'number']),
		loadSmarts: Module.cwrap('indigoLoadSmarts', 'number', ['number']),
		loadSmartsFromString: Module.cwrap('indigoLoadSmartsFromString', 'number', ['string']),
		loadSmartsFromBuffer: Module.cwrap('indigoLoadSmartsFromBuffer', 'number', ['string', 'number']),
		saveMolfile: Module.cwrap('indigoSaveMolfile', 'number', ['number', 'number']),
		molfile: Module.cwrap('indigoMolfile', 'string', ['number']),
		saveCml: Module.cwrap('indigoSaveCml', 'number', ['number', 'number']),
		cml: Module.cwrap('indigoCml', 'string', ['number']),
		saveCdxml: Module.cwrap('indigoSaveCdxml', 'number', ['number', 'number']),
		cdxml: Module.cwrap('indigoCdxml', 'string', ['number']),
		saveMDLCT: Module.cwrap('indigoSaveMDLCT', 'number', ['number', 'number']),
		nameToStructure: Module.cwrap('indigoNameToStructure', 'number', ['string', 'string']),
		loadReaction: Module.cwrap('indigoLoadReaction', 'number', ['number']),
		loadReactionFromString: Module.cwrap('indigoLoadReactionFromString', 'number', ['string']),
		loadReactionFromBuffer: Module.cwrap('indigoLoadReactionFromBuffer', 'number', ['string', 'number']),
		loadQueryReaction: Module.cwrap('indigoLoadQueryReaction', 'number', ['number']),
		loadQueryReactionFromString: Module.cwrap('indigoLoadQueryReactionFromString', 'number', ['string']),
		loadQueryReactionFromBuffer: Module.cwrap('indigoLoadQueryReactionFromBuffer', 'number', ['string', 'number']),
		loadReactionSmarts: Module.cwrap('indigoLoadReactionSmarts', 'number', ['number']),
		loadReactionSmartsFromString: Module.cwrap('indigoLoadReactionSmartsFromString', 'number', ['string']),
		loadReactionSmartsFromBuffer: Module.cwrap('indigoLoadReactionSmartsFromBuffer', 'number', ['string', 'number']),
		createReaction: Module.cwrap('indigoCreateReaction', 'number', []),
		createQueryReaction: Module.cwrap('indigoCreateQueryReaction', 'number', []),
		addReactant: Module.cwrap('indigoAddReactant', 'number', ['number', 'number']),
		addProduct: Module.cwrap('indigoAddProduct', 'number', ['number', 'number']),
		addCatalyst: Module.cwrap('indigoAddCatalyst', 'number', ['number', 'number']),
		countReactants: Module.cwrap('indigoCountReactants', 'number', ['number']),
		countProducts: Module.cwrap('indigoCountProducts', 'number', ['number']),
		countCatalysts: Module.cwrap('indigoCountCatalysts', 'number', ['number']),
		countMolecules: Module.cwrap('indigoCountMolecules', 'number', ['number']),
		getMolecule: Module.cwrap('indigoGetMolecule', 'number', ['number', 'number']),
		iterateReactants: Module.cwrap('indigoIterateReactants', 'number', ['number']),
		iterateProducts: Module.cwrap('indigoIterateProducts', 'number', ['number']),
		iterateCatalysts: Module.cwrap('indigoIterateCatalysts', 'number', ['number']),
		iterateMolecules: Module.cwrap('indigoIterateMolecules', 'number', ['number']),
		saveRxnfile: Module.cwrap('indigoSaveRxnfile', 'number', ['number', 'number']),
		rxnfile: Module.cwrap('indigoRxnfile', 'string', ['number']),
		optimize: Module.cwrap('indigoOptimize', 'number', ['number', 'string']),
		normalize: Module.cwrap('indigoNormalize', 'number', ['number', 'string']),
		standardize: Module.cwrap('indigoStandardize', 'number', ['number']),
		ionize: Module.cwrap('indigoIonize', 'number', ['number', 'number', 'number']),
		getAcidPkaValue: Module.cwrap('indigoGetAcidPkaValue', 'array', ['number', 'number', 'number', 'number']),
		getBasicPkaValue: Module.cwrap('indigoGetBasicPkaValue', 'array', ['number', 'number', 'number', 'number']),
		automap: Module.cwrap('indigoAutomap', 'number', ['number', 'string']),
		getAtomMappingNumber: Module.cwrap('indigoGetAtomMappingNumber', 'number', ['number', 'number']),
		setAtomMappingNumber: Module.cwrap('indigoSetAtomMappingNumber', 'number', ['number', 'number', 'number']),
		getReactingCenter: Module.cwrap('indigoGetReactingCenter', 'number', ['number', 'number', 'number']),
		setReactingCenter: Module.cwrap('indigoSetReactingCenter', 'number', ['number', 'number', 'number']),
		clearAAM: Module.cwrap('indigoClearAAM', 'number', ['number']),
		correctReactingCenters: Module.cwrap('indigoCorrectReactingCenters', 'number', ['number']),
		iterateAtoms: Module.cwrap('indigoIterateAtoms', 'number', ['number']),
		iteratePseudoatoms: Module.cwrap('indigoIteratePseudoatoms', 'number', ['number']),
		iterateRSites: Module.cwrap('indigoIterateRSites', 'number', ['number']),
		iterateStereocenters: Module.cwrap('indigoIterateStereocenters', 'number', ['number']),
		iterateAlleneCenters: Module.cwrap('indigoIterateAlleneCenters', 'number', ['number']),
		iterateRGroups: Module.cwrap('indigoIterateRGroups', 'number', ['number']),
		countRGroups: Module.cwrap('indigoCountRGroups', 'number', ['number']),
		isPseudoatom: Module.cwrap('indigoIsPseudoatom', 'number', ['number']),
		isRSite: Module.cwrap('indigoIsRSite', 'number', ['number']),
		stereocenterType: Module.cwrap('indigoStereocenterType', 'number', ['number']),
		changeStereocenterType: Module.cwrap('indigoChangeStereocenterType', 'number', ['number', 'number']),
		stereocenterGroup: Module.cwrap('indigoStereocenterGroup', 'number', ['number']),
		setStereocenterGroup: Module.cwrap('indigoSetStereocenterGroup', 'number', ['number', 'number']),
		stereocenterPyramid: Module.cwrap('indigoStereocenterPyramid', 'number', ['number']),
		singleAllowedRGroup: Module.cwrap('indigoSingleAllowedRGroup', 'number', ['number']),
		addStereocenter: Module.cwrap('indigoAddStereocenter', 'number', ['number', 'number', 'number', 'number', 'number', 'number']),
		iterateRGroupFragments: Module.cwrap('indigoIterateRGroupFragments', 'number', ['number']),
		countAttachmentPoints: Module.cwrap('indigoCountAttachmentPoints', 'number', ['number']),
		iterateAttachmentPoints: Module.cwrap('indigoIterateAttachmentPoints', 'number', ['number', 'number']),
		symbol: Module.cwrap('indigoSymbol', 'string', ['number']),
		degree: Module.cwrap('indigoDegree', 'number', ['number']),
		getCharge: Module.cwrap('indigoGetCharge', 'number', ['number', 'number']),
		getExplicitValence: Module.cwrap('indigoGetExplicitValence', 'number', ['number', 'number']),
		setExplicitValence: Module.cwrap('indigoSetExplicitValence', 'number', ['number', 'number']),
		atomicNumber: Module.cwrap('indigoAtomicNumber', 'number', ['number']),
		isotope: Module.cwrap('indigoIsotope', 'number', ['number']),
		valence: Module.cwrap('indigoValence', 'number', ['number']),
		checkValence: Module.cwrap('indigoCheckValence', 'number', ['number']),
		checkQuery: Module.cwrap('indigoCheckQuery', 'number', ['number']),
		checkRGroups: Module.cwrap('indigoCheckRGroups', 'number', ['number']),
		countHydrogens: Module.cwrap('indigoCountHydrogens', 'number', ['number', 'number']),
		countImplicitHydrogens: Module.cwrap('indigoCountImplicitHydrogens', 'number', ['number']),
		xYZ: Module.cwrap('indigoXYZ', 'array', ['number']),
		setXYZ: Module.cwrap('indigoSetXYZ', 'number', ['number', 'number', 'number', 'number']),
		countSuperatoms: Module.cwrap('indigoCountSuperatoms', 'number', ['number']),
		countDataSGroups: Module.cwrap('indigoCountDataSGroups', 'number', ['number']),
		countRepeatingUnits: Module.cwrap('indigoCountRepeatingUnits', 'number', ['number']),
		countMultipleGroups: Module.cwrap('indigoCountMultipleGroups', 'number', ['number']),
		countGenericSGroups: Module.cwrap('indigoCountGenericSGroups', 'number', ['number']),
		iterateDataSGroups: Module.cwrap('indigoIterateDataSGroups', 'number', ['number']),
		iterateSuperatoms: Module.cwrap('indigoIterateSuperatoms', 'number', ['number']),
		iterateGenericSGroups: Module.cwrap('indigoIterateGenericSGroups', 'number', ['number']),
		iterateRepeatingUnits: Module.cwrap('indigoIterateRepeatingUnits', 'number', ['number']),
		iterateMultipleGroups: Module.cwrap('indigoIterateMultipleGroups', 'number', ['number']),
		iterateSGroups: Module.cwrap('indigoIterateSGroups', 'number', ['number']),
		getSuperatom: Module.cwrap('indigoGetSuperatom', 'number', ['number', 'number']),
		getDataSGroup: Module.cwrap('indigoGetDataSGroup', 'number', ['number', 'number']),
		getGenericSGroup: Module.cwrap('indigoGetGenericSGroup', 'number', ['number', 'number']),
		getMultipleGroup: Module.cwrap('indigoGetMultipleGroup', 'number', ['number', 'number']),
		getRepeatingUnit: Module.cwrap('indigoGetRepeatingUnit', 'number', ['number', 'number']),
		description: Module.cwrap('indigoDescription', 'string', ['number']),
		data: Module.cwrap('indigoData', 'string', ['number']),
		addDataSGroup: Module.cwrap('indigoAddDataSGroup', 'number', ['number', 'number', 'number', 'number', 'number', 'string', 'string']),
		addSuperatom: Module.cwrap('indigoAddSuperatom', 'number', ['number', 'number', 'number', 'string']),
		setDataSGroupXY: Module.cwrap('indigoSetDataSGroupXY', 'number', ['number', 'number', 'number', 'string']),
		setSGroupData: Module.cwrap('indigoSetSGroupData', 'number', ['number', 'string']),
		setSGroupCoords: Module.cwrap('indigoSetSGroupCoords', 'number', ['number', 'number', 'number']),
		setSGroupDescription: Module.cwrap('indigoSetSGroupDescription', 'number', ['number', 'string']),
		setSGroupFieldName: Module.cwrap('indigoSetSGroupFieldName', 'number', ['number', 'string']),
		setSGroupQueryCode: Module.cwrap('indigoSetSGroupQueryCode', 'number', ['number', 'string']),
		setSGroupQueryOper: Module.cwrap('indigoSetSGroupQueryOper', 'number', ['number', 'string']),
		setSGroupDisplay: Module.cwrap('indigoSetSGroupDisplay', 'number', ['number', 'string']),
		setSGroupLocation: Module.cwrap('indigoSetSGroupLocation', 'number', ['number', 'string']),
		setSGroupTag: Module.cwrap('indigoSetSGroupTag', 'number', ['number', 'string']),
		setSGroupTagAlign: Module.cwrap('indigoSetSGroupTagAlign', 'number', ['number', 'number']),
		setSGroupDataType: Module.cwrap('indigoSetSGroupDataType', 'number', ['number', 'string']),
		setSGroupXCoord: Module.cwrap('indigoSetSGroupXCoord', 'number', ['number', 'number']),
		setSGroupYCoord: Module.cwrap('indigoSetSGroupYCoord', 'number', ['number', 'number']),
		createSGroup: Module.cwrap('indigoCreateSGroup', 'number', ['string', 'number', 'string']),
		getSGroupClass: Module.cwrap('indigoGetSGroupClass', 'string', ['number']),
		getSGroupName: Module.cwrap('indigoGetSGroupName', 'string', ['number']),
		setSGroupClass: Module.cwrap('indigoSetSGroupClass', 'number', ['number', 'string']),
		setSGroupName: Module.cwrap('indigoSetSGroupName', 'number', ['number', 'string']),
		getSGroupNumCrossBonds: Module.cwrap('indigoGetSGroupNumCrossBonds', 'number', ['number']),
		addSGroupAttachmentPoint: Module.cwrap('indigoAddSGroupAttachmentPoint', 'number', ['number', 'number', 'number', 'string']),
		deleteSGroupAttachmentPoint: Module.cwrap('indigoDeleteSGroupAttachmentPoint', 'number', ['number', 'number']),
		getSGroupDisplayOption: Module.cwrap('indigoGetSGroupDisplayOption', 'number', ['number']),
		setSGroupDisplayOption: Module.cwrap('indigoSetSGroupDisplayOption', 'number', ['number', 'number']),
		getSGroupSeqId: Module.cwrap('indigoGetSGroupSeqId', 'number', ['number']),
		getSGroupMultiplier: Module.cwrap('indigoGetSGroupMultiplier', 'number', ['number']),
		setSGroupMultiplier: Module.cwrap('indigoSetSGroupMultiplier', 'number', ['number', 'number']),
		getRepeatingUnitSubscript: Module.cwrap('indigoGetRepeatingUnitSubscript', 'string', ['number']),
		getRepeatingUnitConnectivity: Module.cwrap('indigoGetRepeatingUnitConnectivity', 'number', ['number']),
		setSGroupBrackets: Module.cwrap('indigoSetSGroupBrackets', 'number', ['number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number']),
		findSGroups: Module.cwrap('indigoFindSGroups', 'number', ['number', 'string', 'string']),
		getSGroupType: Module.cwrap('indigoGetSGroupType', 'number', ['number']),
		getSGroupIndex: Module.cwrap('indigoGetSGroupIndex', 'number', ['number']),
		getSGroupOriginalId: Module.cwrap('indigoGetSGroupOriginalId', 'number', ['number']),
		setSGroupOriginalId: Module.cwrap('indigoSetSGroupOriginalId', 'number', ['number', 'number']),
		getSGroupParentId: Module.cwrap('indigoGetSGroupParentId', 'number', ['number']),
		setSGroupParentId: Module.cwrap('indigoSetSGroupParentId', 'number', ['number', 'number']),
		transformSCSRtoCTAB: Module.cwrap('indigoTransformSCSRtoCTAB', 'number', ['number']),
		transformCTABtoSCSR: Module.cwrap('indigoTransformCTABtoSCSR', 'number', ['number', 'number']),
		resetCharge: Module.cwrap('indigoResetCharge', 'number', ['number']),
		resetExplicitValence: Module.cwrap('indigoResetExplicitValence', 'number', ['number']),
		resetIsotope: Module.cwrap('indigoResetIsotope', 'number', ['number']),
		setAttachmentPoint: Module.cwrap('indigoSetAttachmentPoint', 'number', ['number', 'number']),
		clearAttachmentPoints: Module.cwrap('indigoClearAttachmentPoints', 'number', ['number']),
		removeConstraints: Module.cwrap('indigoRemoveConstraints', 'number', ['number', 'string']),
		addConstraint: Module.cwrap('indigoAddConstraint', 'number', ['number', 'string', 'string']),
		addConstraintNot: Module.cwrap('indigoAddConstraintNot', 'number', ['number', 'string', 'string']),
		addConstraintOr: Module.cwrap('indigoAddConstraintOr', 'number', ['number', 'string', 'string']),
		resetStereo: Module.cwrap('indigoResetStereo', 'number', ['number']),
		invertStereo: Module.cwrap('indigoInvertStereo', 'number', ['number']),
		countAtoms: Module.cwrap('indigoCountAtoms', 'number', ['number']),
		countBonds: Module.cwrap('indigoCountBonds', 'number', ['number']),
		countPseudoatoms: Module.cwrap('indigoCountPseudoatoms', 'number', ['number']),
		countRSites: Module.cwrap('indigoCountRSites', 'number', ['number']),
		iterateBonds: Module.cwrap('indigoIterateBonds', 'number', ['number']),
		bondOrder: Module.cwrap('indigoBondOrder', 'number', ['number']),
		bondStereo: Module.cwrap('indigoBondStereo', 'number', ['number']),
		topology: Module.cwrap('indigoTopology', 'number', ['number']),
		iterateNeighbors: Module.cwrap('indigoIterateNeighbors', 'number', ['number']),
		bond: Module.cwrap('indigoBond', 'number', ['number']),
		getAtom: Module.cwrap('indigoGetAtom', 'number', ['number', 'number']),
		getBond: Module.cwrap('indigoGetBond', 'number', ['number', 'number']),
		source: Module.cwrap('indigoSource', 'number', ['number']),
		destination: Module.cwrap('indigoDestination', 'number', ['number']),
		clearCisTrans: Module.cwrap('indigoClearCisTrans', 'number', ['number']),
		clearStereocenters: Module.cwrap('indigoClearStereocenters', 'number', ['number']),
		countStereocenters: Module.cwrap('indigoCountStereocenters', 'number', ['number']),
		clearAlleneCenters: Module.cwrap('indigoClearAlleneCenters', 'number', ['number']),
		countAlleneCenters: Module.cwrap('indigoCountAlleneCenters', 'number', ['number']),
		resetSymmetricCisTrans: Module.cwrap('indigoResetSymmetricCisTrans', 'number', ['number']),
		resetSymmetricStereocenters: Module.cwrap('indigoResetSymmetricStereocenters', 'number', ['number']),
		markEitherCisTrans: Module.cwrap('indigoMarkEitherCisTrans', 'number', ['number']),
		markStereobonds: Module.cwrap('indigoMarkStereobonds', 'number', ['number']),
		validateChirality: Module.cwrap('indigoValidateChirality', 'number', ['number']),
		addAtom: Module.cwrap('indigoAddAtom', 'number', ['number', 'string']),
		resetAtom: Module.cwrap('indigoResetAtom', 'number', ['number', 'string']),
		addRSite: Module.cwrap('indigoAddRSite', 'number', ['number', 'string']),
		setRSite: Module.cwrap('indigoSetRSite', 'number', ['number', 'string']),
		setCharge: Module.cwrap('indigoSetCharge', 'number', ['number', 'number']),
		setIsotope: Module.cwrap('indigoSetIsotope', 'number', ['number', 'number']),
		getRadicalElectrons: Module.cwrap('indigoGetRadicalElectrons', 'number', ['number', 'number']),
		getRadical: Module.cwrap('indigoGetRadical', 'number', ['number', 'number']),
		setRadical: Module.cwrap('indigoSetRadical', 'number', ['number', 'number']),
		resetRadical: Module.cwrap('indigoResetRadical', 'number', ['number']),
		setImplicitHCount: Module.cwrap('indigoSetImplicitHCount', 'number', ['number', 'number']),
		addBond: Module.cwrap('indigoAddBond', 'number', ['number', 'number', 'number']),
		setBondOrder: Module.cwrap('indigoSetBondOrder', 'number', ['number', 'number']),
		merge: Module.cwrap('indigoMerge', 'number', ['number', 'number']),
		highlight: Module.cwrap('indigoHighlight', 'number', ['number']),
		unhighlight: Module.cwrap('indigoUnhighlight', 'number', ['number']),
		isHighlighted: Module.cwrap('indigoIsHighlighted', 'number', ['number']),
		countComponents: Module.cwrap('indigoCountComponents', 'number', ['number']),
		componentIndex: Module.cwrap('indigoComponentIndex', 'number', ['number']),
		iterateComponents: Module.cwrap('indigoIterateComponents', 'number', ['number']),
		component: Module.cwrap('indigoComponent', 'number', ['number', 'number']),
		countSSSR: Module.cwrap('indigoCountSSSR', 'number', ['number']),
		iterateSSSR: Module.cwrap('indigoIterateSSSR', 'number', ['number']),
		iterateSubtrees: Module.cwrap('indigoIterateSubtrees', 'number', ['number', 'number', 'number']),
		iterateRings: Module.cwrap('indigoIterateRings', 'number', ['number', 'number', 'number']),
		iterateEdgeSubmolecules: Module.cwrap('indigoIterateEdgeSubmolecules', 'number', ['number', 'number', 'number']),
		countHeavyAtoms: Module.cwrap('indigoCountHeavyAtoms', 'number', ['number']),
		grossFormula: Module.cwrap('indigoGrossFormula', 'number', ['number']),
		molecularWeight: Module.cwrap('indigoMolecularWeight', 'number', ['number']),
		mostAbundantMass: Module.cwrap('indigoMostAbundantMass', 'number', ['number']),
		monoisotopicMass: Module.cwrap('indigoMonoisotopicMass', 'number', ['number']),
		massComposition: Module.cwrap('indigoMassComposition', 'string', ['number']),
		canonicalSmiles: Module.cwrap('indigoCanonicalSmiles', 'string', ['number']),
		layeredCode: Module.cwrap('indigoLayeredCode', 'string', ['number']),
		symmetryClasses: Module.cwrap('indigoSymmetryClasses', 'number', ['number', 'number']),
		hasCoord: Module.cwrap('indigoHasCoord', 'number', ['number']),
		hasZCoord: Module.cwrap('indigoHasZCoord', 'number', ['number']),
		isChiral: Module.cwrap('indigoIsChiral', 'number', ['number']),
		isPossibleFischerProjection: Module.cwrap('indigoIsPossibleFischerProjection', 'number', ['number', 'string']),
		createSubmolecule: Module.cwrap('indigoCreateSubmolecule', 'number', ['number', 'number', 'number']),
		createEdgeSubmolecule: Module.cwrap('indigoCreateEdgeSubmolecule', 'number', ['number', 'number', 'number', 'number', 'number']),
		getSubmolecule: Module.cwrap('indigoGetSubmolecule', 'number', ['number', 'number', 'number']),
		removeAtoms: Module.cwrap('indigoRemoveAtoms', 'number', ['number', 'number', 'number']),
		removeBonds: Module.cwrap('indigoRemoveBonds', 'number', ['number', 'number', 'number']),
		alignAtoms: Module.cwrap('indigoAlignAtoms', 'number', ['number', 'number', 'number', 'array']),
		aromatize: Module.cwrap('indigoAromatize', 'number', ['number']),
		dearomatize: Module.cwrap('indigoDearomatize', 'number', ['number']),
		foldHydrogens: Module.cwrap('indigoFoldHydrogens', 'number', ['number']),
		unfoldHydrogens: Module.cwrap('indigoUnfoldHydrogens', 'number', ['number']),
		layout: Module.cwrap('indigoLayout', 'number', ['number']),
		clean2d: Module.cwrap('indigoClean2d', 'number', ['number']),
		smiles: Module.cwrap('indigoSmiles', 'string', ['number']),
		smarts: Module.cwrap('indigoSmarts', 'string', ['number']),
		canonicalSmarts: Module.cwrap('indigoCanonicalSmarts', 'string', ['number']),
		exactMatch: Module.cwrap('indigoExactMatch', 'number', ['number', 'number', 'string']),
		setTautomerRule: Module.cwrap('indigoSetTautomerRule', 'number', ['number', 'string', 'string']),
		removeTautomerRule: Module.cwrap('indigoRemoveTautomerRule', 'number', ['number']),
		clearTautomerRules: Module.cwrap('indigoClearTautomerRules', 'number', []),
		name: Module.cwrap('indigoName', 'string', ['number']),
		setName: Module.cwrap('indigoSetName', 'number', ['number', 'string']),
		unserialize: Module.cwrap('indigoUnserialize', 'number', ['array', 'number']),
		hasProperty: Module.cwrap('indigoHasProperty', 'number', ['number', 'string']),
		getProperty: Module.cwrap('indigoGetProperty', 'string', ['number', 'string']),
		setProperty: Module.cwrap('indigoSetProperty', 'number', ['number', 'string', 'string']),
		removeProperty: Module.cwrap('indigoRemoveProperty', 'number', ['number', 'string']),
		iterateProperties: Module.cwrap('indigoIterateProperties', 'number', ['number']),
		clearProperties: Module.cwrap('indigoClearProperties', 'number', ['number']),
		checkBadValence: Module.cwrap('indigoCheckBadValence', 'string', ['number']),
		checkAmbiguousH: Module.cwrap('indigoCheckAmbiguousH', 'string', ['number']),
		fingerprint: Module.cwrap('indigoFingerprint', 'number', ['number', 'string']),
		countBits: Module.cwrap('indigoCountBits', 'number', ['number']),
		commonBits: Module.cwrap('indigoCommonBits', 'number', ['number', 'number']),
		oneBitsList: Module.cwrap('indigoOneBitsList', 'string', ['number']),
		similarity: Module.cwrap('indigoSimilarity', 'number', ['number', 'number', 'string']),
		iterateSDF: Module.cwrap('indigoIterateSDF', 'number', ['number']),
		iterateRDF: Module.cwrap('indigoIterateRDF', 'number', ['number']),
		iterateSmiles: Module.cwrap('indigoIterateSmiles', 'number', ['number']),
		iterateCML: Module.cwrap('indigoIterateCML', 'number', ['number']),
		iterateCDX: Module.cwrap('indigoIterateCDX', 'number', ['number']),
		rawData: Module.cwrap('indigoRawData', 'string', ['number']),
		tell: Module.cwrap('indigoTell', 'number', ['number']),
		tell64: Module.cwrap('indigoTell64', 'number', ['number']),
		sdfAppend: Module.cwrap('indigoSdfAppend', 'number', ['number', 'number']),
		smilesAppend: Module.cwrap('indigoSmilesAppend', 'number', ['number', 'number']),
		rdfHeader: Module.cwrap('indigoRdfHeader', 'number', ['number']),
		rdfAppend: Module.cwrap('indigoRdfAppend', 'number', ['number', 'number']),
		cmlHeader: Module.cwrap('indigoCmlHeader', 'number', ['number']),
		cmlAppend: Module.cwrap('indigoCmlAppend', 'number', ['number', 'number']),
		cmlFooter: Module.cwrap('indigoCmlFooter', 'number', ['number']),
		createSaver: Module.cwrap('indigoCreateSaver', 'number', ['number', 'string']),
		append: Module.cwrap('indigoAppend', 'number', ['number', 'number']),
		createArray: Module.cwrap('indigoCreateArray', 'number', []),
		arrayAdd: Module.cwrap('indigoArrayAdd', 'number', ['number', 'number']),
		at: Module.cwrap('indigoAt', 'number', ['number', 'number']),
		count: Module.cwrap('indigoCount', 'number', ['number']),
		clear: Module.cwrap('indigoClear', 'number', ['number']),
		iterateArray: Module.cwrap('indigoIterateArray', 'number', ['number']),
		substructureMatcher: Module.cwrap('indigoSubstructureMatcher', 'number', ['number', 'string']),
		ignoreAtom: Module.cwrap('indigoIgnoreAtom', 'number', ['number', 'number']),
		unignoreAtom: Module.cwrap('indigoUnignoreAtom', 'number', ['number', 'number']),
		unignoreAllAtoms: Module.cwrap('indigoUnignoreAllAtoms', 'number', ['number']),
		match: Module.cwrap('indigoMatch', 'number', ['number', 'number']),
		countMatches: Module.cwrap('indigoCountMatches', 'number', ['number', 'number']),
		countMatchesWithLimit: Module.cwrap('indigoCountMatchesWithLimit', 'number', ['number', 'number', 'number']),
		iterateMatches: Module.cwrap('indigoIterateMatches', 'number', ['number', 'number']),
		highlightedTarget: Module.cwrap('indigoHighlightedTarget', 'number', ['number']),
		mapAtom: Module.cwrap('indigoMapAtom', 'number', ['number', 'number']),
		mapBond: Module.cwrap('indigoMapBond', 'number', ['number', 'number']),
		mapMolecule: Module.cwrap('indigoMapMolecule', 'number', ['number', 'number']),
		iterateTautomers: Module.cwrap('indigoIterateTautomers', 'number', ['number', 'string']),
		extractCommonScaffold: Module.cwrap('indigoExtractCommonScaffold', 'number', ['number', 'string']),
		allScaffolds: Module.cwrap('indigoAllScaffolds', 'number', ['number']),
		decomposeMolecules: Module.cwrap('indigoDecomposeMolecules', 'number', ['number', 'number']),
		decomposedMoleculeScaffold: Module.cwrap('indigoDecomposedMoleculeScaffold', 'number', ['number']),
		iterateDecomposedMolecules: Module.cwrap('indigoIterateDecomposedMolecules', 'number', ['number']),
		decomposedMoleculeHighlighted: Module.cwrap('indigoDecomposedMoleculeHighlighted', 'number', ['number']),
		decomposedMoleculeWithRGroups: Module.cwrap('indigoDecomposedMoleculeWithRGroups', 'number', ['number']),
		createDecomposer: Module.cwrap('indigoCreateDecomposer', 'number', ['number']),
		decomposeMolecule: Module.cwrap('indigoDecomposeMolecule', 'number', ['number', 'number']),
		iterateDecompositions: Module.cwrap('indigoIterateDecompositions', 'number', ['number']),
		addDecomposition: Module.cwrap('indigoAddDecomposition', 'number', ['number', 'number']),
		getFragmentedMolecule: Module.cwrap('indigoGetFragmentedMolecule', 'number', ['number', 'string']),
		rGroupComposition: Module.cwrap('indigoRGroupComposition', 'number', ['number', 'string']),
		expandAbbreviations: Module.cwrap('indigoExpandAbbreviations', 'number', ['number']),
		toString: Module.cwrap('indigoToString', 'string', ['number']),
		reactionProductEnumerate: Module.cwrap('indigoReactionProductEnumerate', 'number', ['number', 'number']),
		transform: Module.cwrap('indigoTransform', 'number', ['number', 'number']),
		transformHELMtoSCSR: Module.cwrap('indigoTransformHELMtoSCSR', 'number', ['number']),
		dbgInternalType: Module.cwrap('indigoDbgInternalType', 'string', ['number']),
		dbgBreakpoint: Module.cwrap('indigoDbgBreakpoint', null, []),
		dbgProfiling: Module.cwrap('indigoDbgProfiling', 'string', ['number']),
		dbgResetProfiling: Module.cwrap('indigoDbgResetProfiling', 'number', ['number']),
		dbgProfilingGetCounter: Module.cwrap('indigoDbgProfilingGetCounter', 'number', ['string', 'number'])
	};
	result._module = Module;  // save module object
	return result;
};